#ifndef APPLICATION_H
#define APPLICATION_H

#include <string>
#include <atomic>
#include <memory>
#include <functional>

#include "Config.h"
#include "Logger.h"
#include "SipManager.h"
#include "StreamManager.h"
#include "XmlHelper.h"

class Application {
public:
    // 获取单例实例
    static Application& getInstance();
    
    // 初始化应用程序
    bool initialize();
    
    // 运行应用程序
    void run();
    
    // 停止应用程序
    void stop();
    
    // 是否正在运行
    bool isRunning() const;
    
    // 处理SIP注册状态
    void handleRegState(pjsua_acc_id acc_id);
    
    // 处理SIP呼入请求
    void handleIncomingCall(pjsua_acc_id acc_id, pjsua_call_id call_id, pjsip_rx_data *rdata);
    
    // 处理SIP呼叫状态
    void handleCallState(pjsua_call_id call_id, pjsip_event *e);
    
    // 处理SIP媒体状态
    void handleCallMediaState(pjsua_call_id call_id);
    
    // 处理SIP请求
    pj_bool_t handleRxRequest(pjsip_rx_data *rdata);
    
    // 测试SDP解析
    void testSdpParsing();
    
private:
    // 私有构造函数（单例模式）
    Application();
    
    // 禁止拷贝和赋值
    Application(const Application&) = delete;
    Application& operator=(const Application&) = delete;
    
    // 析构函数
    ~Application();
    
    // 处理SIP消息请求
    void handleSipMessage(const std::string& message_body);
    
    // 成员变量
    std::atomic<bool> running;
};

#endif // APPLICATION_H 